package com.ihrm.system.service.impl;

import com.ihrm.common.service.BaseService;
import com.ihrm.common.utils.IdWorker;
import com.ihrm.common.utils.PermissionConstants;
import com.ihrm.domain.system.Permission;
import com.ihrm.domain.system.Role;
import com.ihrm.system.dao.PermissionDao;
import com.ihrm.system.dao.RoleDao;
import com.ihrm.system.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @author 小伟
 * @version V1.0
 * @Package com.ihrm.system.service.impl
 * @date 2020/12/13 9:30
 * @Copyright © 2020-2021 郑州恒星科技有限责任公司
 * 角色业务层实现类
 */
@Service
public class RoleServiceImpl extends BaseService<RoleServiceImpl> implements RoleService {
    @Autowired
    RoleDao roleDao;
    @Autowired
    IdWorker idWorker;
    @Autowired
    PermissionDao permissionDao;
    /**
     * 添加权限信息
     *
     * @param role 权限对象
     */
    @Override
    public void saveRole(Role role) {
        String id = idWorker.nextId() + "";
        role.setId(id);
        role.setCompanyId("1");
        roleDao.save(role);
    }

    /**
     * 修改权限信息
     *
     * @param role 权限对象
     */
    @Override
    public void updateRole(Role role) {
        roleDao.save(role);
    }

    /**
     * 根据id查询权限信息
     *
     * @param id 权限id
     * @return 权限信息
     */
    @Override
    public Role findById(String id) {
        return roleDao.findById(id).get();
    }

    /**
     * 查询企业全部权限信息
     *
     * @param companyId 企业id
     * @param page      页码
     * @param size      页面大小
     * @return 权限列表
     */
    @Override
    public Page<Role> findSearch(String companyId, int page, int size) {
        Page <Role> roleList =  roleDao.findAll(getSpecification(companyId), PageRequest.of(page - 1, size));
        return roleList;
    }

    /**
     * 根据权限id删除权限
     *
     * @param id 权限id
     */
    @Override
    public void deleteById(String id) {
        roleDao.deleteById(id);
    }

    /**
     * 为角色分配权限
     *
     * @param roleId  角色id
     * @param permIds 权限id集合
     */
    @Override
    public void assignPerms(String roleId, List<String> permIds) {
        Role role = roleDao.findById(roleId).get();
        Set<Permission> perms = new HashSet<>();
        //给角色授权
        for (String permId : permIds) {
            Permission permission = permissionDao.findById(permId).get();
            //查询相应权限下的API子权限
            List<Permission> list = permissionDao.findAllByTypeAndPid(PermissionConstants.PY_API,permission.getId());
            perms.addAll(list);
            perms.add(permission);
        }
        role.setPermissions(perms);
        roleDao.save(role);
    }

    /**
     * 查询企业全部角色信息
     *
     * @param companyId 企业id
     * @return 角色列表
     */
    @Override
    public List<Role> findAll(String companyId) {
        return roleDao.findAll(getSpecification(companyId));
    }
}
